package com.tiancheng.trade.settlement.model.merchant;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.tiancheng.trade.settlement.util.LongJsonDeserializer;
import com.tiancheng.trade.settlement.util.LongJsonSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

import jakarta.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
@EqualsAndHashCode()
@TableName(value = "merchant")
public class Merchant implements Serializable {
    @JsonDeserialize(using = LongJsonDeserializer.class)
    @JsonSerialize(using = LongJsonSerializer.class)
    @TableId(type = IdType.AUTO)
    private Long id;      //主键

    @JsonProperty("created_by")
    private String createdBy; //创建人

    @JsonProperty("created_dt")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdDt;//创建时间

    @JsonProperty("last_upd_by")
    private String lastUpdBy;

    @JsonProperty("last_upd_dt")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastUpdDt;

    @JsonProperty("is_delete")
    private Integer isDelete;

    /**
     * 机构编码/机构ID
     */
    @NotBlank
    @JsonProperty("organization_code")
    private String organizationCode;
    /**
     * 机构名称
     */
    @TableField(exist = false)
    @JsonProperty("organization_name")
    private String organizationName;
    /**
     * 商户编码/商户ID
     */
    @NotBlank
    @JsonProperty("merchant_code")
    private String merchantCode;
    /**
     * 商户名称
     */
    @NotBlank
    @JsonProperty("merchant_name")
    private String merchantName;
    /**
     * 开户行
     */
    //    @NotBlank
    @JsonProperty("opening_bank")
    private String openingBank;
    /**
     * 开户名
     */
    //    @NotBlank
    @JsonProperty("account_name")
    private String accountName;
    /**
     * 开户行行号，行号为且仅能为12位
     */
    @JsonProperty("bank_code")
    private String bankCode;
    /**
     * 结算账户类型
     *
     */
    @NotBlank
    @JsonProperty("account_type")
    private String accountType;
    /**
     * 结算账户类型名称
     */
    @TableField(exist = false)
    private String accountTypeName;
    /**
     * 账号
     */
    //    @NotBlank
    @JsonProperty("account_no")
    private String accountNo;
    /**
     * 省编号
     */
    @JsonProperty("province_code")
    private String provinceCode;
    /**
     * 省名称
     */
    @JsonProperty("province_name")
    private String provinceName;
    /**
     * 城市编号
     */
    //    @NotBlank
    @JsonProperty("city_code")
    private String cityCode;
    /**
     * 城市名称
     */
    //    @NotBlank
    @JsonProperty("city_name")
    private String cityName;
    /**
     * 区县编号
     */
    //    @NotBlank
    @JsonProperty("district_code")
    private String districtCode;
    /**
     * 区县名称
     */
    //    @NotBlank
    @JsonProperty("district_name")
    private String districtName;
    /** 合同起始时间
     *
     */
//    @NotBlank
//    @JsonProperty("contract_start_date")
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private Date contractStartDate;
    /** 合同终止时间
     *
     */
//    @NotBlank
//    @JsonProperty("contract_end_date")
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private Date contractEndDate;
    /**
     * 备注
     */
    @JsonProperty("remark")
    private String remark;

    /**
     * 商户状态：0冻结使用、1审核通过、2审核失败、3保存
     */
    @JsonProperty("state")
    private int state;
    /**
     * 联系电话
     */
    @JsonProperty("phone")
    private String phone;
    /**
     * 商家头图
     */
    @JsonProperty("image")
    private String image;
    /**
     * 业务侧业务场景标识
     *
     */
    @JsonProperty("scene")
    private String scene;
    /**
     * 收入确认
     *
     */
    @JsonProperty("revenue_type")
    private String revenueType;
    /**
     * 平台收入金额
     *
     */
    @JsonProperty("platform_revenue_amount")
    private Integer platformRevenueAmount;
    /**
     * 平台收入比例
     *
     */
    @JsonProperty("platform_revenue_scale")
    private BigDecimal platformRevenueScale;

}
